package com.lzycug;

import java.util.concurrent.Executors;

/**
 * 函数式接口测试入口类
 * 基本测试思路：先进行调用第三方的缴费业务，该缴费业务不会及时返回结果，待该缴费结果返回后调用记库等操作
 */
public class FunctionalDemo {
    public static boolean payStatus;

    public static void main(String[] args) {
        String name = Thread.currentThread().getName();
        start((pre, val) -> System.out.println(name + pre + val));
    }

    public static void start(WriteDBCallBack callBack) {
        // 另起线程进行支付
        new Thread(FunctionalDemo::startPay).start();

        // 另起线程查支付结果
        PayThread thread = new PayThread("微信", (a, b) -> callBack.write("========开始记录数据库，" + a, b + ""));
        Executors.newFixedThreadPool(1).execute(thread);
    }

    public static void startPay() {
        String name = Thread.currentThread().getName();
        try {
            System.out.println(name + "发起第三方交易... ...");
            // 模拟交易耗时
            Thread.sleep(8 * 1000);

            // 交易完成后修改交易状态为成功
            payStatus = true;
            System.out.println(name + "交易成功！！！");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
